home *** CD-ROM | disk | FTP | other *** search
/ Gamers Delight 2 / Gamers Delight 2.iso / Aminet / game / misc / robots.lha / player / beaver.r < prev    next >
Text File  |  1993-04-25  |  3KB  |  176 lines

  1. beaver
  2. ill
  3. /* beaver - sophisticated hit and flee robot */
  4.  
  5. int dam;
  6. int grenze;
  7. int kurs;
  8.  
  9.  
  10. main()
  11. {
  12.  
  13.  int rot, rot_ende, akt_x, akt_y, step;
  14.  
  15.  dam=damage();              /* Sind wir getroffen ? */
  16.  kurs=0;
  17.  
  18.  rot=0; step=45;
  19.  while(rot < 360) {
  20.   look(rot);
  21.   rot+=step;
  22.  }
  23.  
  24.  while(1) {
  25.  
  26.   if(dam+15> damage()) flee(); /* Wenn mich jemand getroffen hat -> abhauen */
  27.   dam=damage();
  28.  
  29.   akt_x=loc_x();
  30.   akt_y=loc_y();
  31.   step=10;
  32.  
  33.   if (akt_x<250 && akt_y<250) { rot=270; rot_ende=540; }
  34.    else
  35.     if (akt_x<250 && akt_y>=750) { rot=180; rot_ende=450; }
  36.      else
  37.       if (akt_x>750 && akt_y<250) { rot=0; rot_ende=270; }
  38.        else
  39.         if (akt_x>750 && akt_y>=750) { rot=90; rot_ende=360; }
  40.          else { rot=0; rot_ende=360; step=30; }
  41.  
  42.   while(rot<rot_ende) {
  43.    look(rot);
  44.    rot+=step;
  45.   }
  46.  
  47.   move(rand(800)+100,rand(800)+100); /* Ein wenig weitergehen */
  48.  
  49.  }
  50. }
  51.  
  52. entfernung(x1,y1,x2,y2)
  53. int x1,y1,x2,y2;
  54. {
  55.   return(sqrt(((x1 - x2) * (x1 - x2)) + ((y1 - y2) * (y1 - y2))));
  56. }
  57.  
  58. move (dest_x, dest_y)
  59. int dest_x, dest_y;
  60. {
  61.   int kurs,range;
  62.  
  63.   kurs = zielfahrt(dest_x,dest_y);
  64.   while (entfernung(loc_x(),loc_y(),dest_x,dest_y) > 50)
  65.   {
  66.     drive (kurs,100);
  67.     if (range = scan(kurs,3))
  68.       cannon(kurs,range);
  69.     if (range = scan(kurs-180,3))
  70.       cannon(kurs-180,range);
  71.   }
  72.   drive(kurs,0);
  73. }
  74.  
  75. zielfahrt(xx,yy)
  76. int xx, yy;
  77. {
  78.   int d,
  79.       x,y;
  80.  
  81.   x = loc_x() - xx;
  82.   y = loc_y() - yy;
  83.  
  84.   if (x == 0) {
  85.     if (y > 0)
  86.       d = 90;
  87.     else
  88.       d = 270;
  89.   }
  90.   else {
  91.     d = atan((100000 * y) / x);
  92.     if (x >= 0)
  93.       d += 180;
  94.     else if ((y > 0) && (x < 0))
  95.       d += 360;
  96.   }
  97.   return (d % 360);
  98. }
  99.  
  100. ziele(d,r,l)
  101. int d,r,l;
  102. {
  103.   if (r > l)
  104.     {
  105.       if (scan(d-r,r) > 0)
  106.         return(ziele(d-r,r/2,l));
  107.       else
  108.         if (scan(d+r,r) > 0)
  109.           return(ziele(d+r,r/2,l));
  110.         else
  111.           if (scan(d,r) > 0)
  112.             return(ziele(d,r/2,l));
  113.           else
  114.             return (d);
  115.     }
  116.   else
  117.     return(d);
  118. }
  119.  
  120. flee_schnell() {
  121.   if (kurs == 0) {
  122.     grenze = 5;
  123.     kurs = 180;
  124.   } else {
  125.     grenze = 995;
  126.     kurs = 0;
  127.   }
  128.   drive(kurs,50);
  129.   kurs=(kurs+180) % 360;
  130.   cannon(kurs,100);
  131.   move(loc_x()-150+rand(300),loc_y()-150+rand(300));
  132. }
  133.  
  134.  
  135. look(deg)
  136. int deg;
  137. {
  138.   int range, tmp;
  139.  
  140.   while ((range=scan(deg,5)) > 0 && range <= 700) {
  141.     drive(course,40);
  142.     cannon(deg,range);
  143.  
  144.     tmp=ziele(deg,10,2);
  145.     cannon(tmp,scan(tmp,2));
  146.  
  147.     if (range>0) cannon(deg,range);
  148.     if (dam+20 >= damage()) {
  149.       dam = damage();
  150.       flee_schnell();
  151.       flee();
  152.       return;
  153.     }
  154.   }
  155. }
  156.  
  157. flee() /* Weg hier ! Wenn was auf dem Weg liegt, ballern ! */
  158. {
  159.   int x,y,zufallkurs,range,tmp;
  160.  
  161.   x = 1000-rand(500);
  162.   y = 1000-rand(500);
  163.   zufallskurs= zielfahrt(x,y);
  164.   while (entfernung(loc_x(),loc_y(),x,y) > 50) {
  165.     drive (zufallskurs,100);
  166.     range = scan (zufallskurs-180,10);
  167.     if (range > 0) {
  168.      tmp=ziele(zufallskurs-180,10,2);
  169.      cannon(tmp,scan(tmp,2));
  170.     }
  171.     else
  172.       cannon(zufallskurs-180,range-70);
  173.   }
  174.   drive(0,0);
  175. }
  176.